/**
 * 封装原生ajax请求,添加token参数.
 * 注意: 此Js文件需要放在 jquery.js 之后
 * @author 329202 符瑜鑫(Ricky Fu)
 * @date 2012-11-28
 */
(function($){
	var TOKEN_KEY = 'com.sfpay.framework.web.TOKEN',
		SEP_KEY = '=|';//此两项是Java端定义的常量
	//~~~~~~~~~~~~~~~~$.ajax覆写
	var $ajaxFn = $.ajax;
	/**
	 * ajax请求封装.<br/>
	 * 如果添加tokenId属性的话,需要在页面中添加标签<sf:token id="[tokenId]" />
	 * @param op $.ajax请求参数.额外增加一个属性:tokenId
	 */
	$.ajax = function(op){
		if(null == op || !op.url) {
			return;
		}
		op.url += (op.url.indexOf('?') == -1 ? '?' : '&')+'tkRd='+Math.random();
		var tkId = op.tokenId, sFn = op.success, data = op.data;
		if(data && typeof data === 'string') {//form表单情形
			op.data = data.indexOf(TOKEN_KEY) == -1 ? data : data+'&rebuild=true';
		} else if(tkId) {//ajax提交情形
			op.data = $.extend(true, data||{}, {
				'com.sfpay.framework.web.TOKEN': $('#'+tkId).val(),
				'rebuild': op.rebuild||true//默认为true
			});
		}
		delete op.tokenId;
		op.success = function(resp, status, xhr){
			if(xhr.getResponseHeader('SF-Repeat-Req') === 'true') {
				alert('请不要重复提交.');
				return;
			}
			if(xhr.getResponseHeader('SF-Exp') === 'true') {
				alert('系统发生异常,请联系技术部人员.');
			} else if(sFn) {
				sFn.call(this, resp, status, xhr);
			}
			var token = xhr.getResponseHeader('SF-Token');
			if(token) {
				$('#'+token.substring(0,token.indexOf(SEP_KEY))).val(token);
			}
		};
		$ajaxFn(op);
	};
	
	//~~~~~~~~~~~~~~~~$.ajaxSubmit覆写
	var $ajaxSubmit = $.fn.ajaxSubmit;
	
	$.fn.ajaxSubmit = function(op){//保证使用上面覆写的ajax
		$ajaxSubmit.call(this, op);
	};
	
})(jQuery);